package com.chen.authority.common.util;

import cn.hutool.core.io.file.FileNameUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

/**
 * 文件 工具类
 *
 * @author chengy
 * @date 2023/10/5
 */
public class FileUtil {

    /* 图像扩展名 */
    private static final String[] IMAGE_EXTENSIONS = {"bmp", "gif", "jpg", "jpeg", "png"};

    /* excel扩展名 */
    private static final String[] EXCEL_EXTENSIONS = {"xls", "xlsx"};

    /**
     * 判断文件是否为空
     *
     * @param file 文件
     * @return 是否为空
     */
    public static boolean isEmpty(MultipartFile file) {
        return file == null || file.isEmpty();
    }

    /**
     * 字节转换
     *
     * @param size 字节大小
     * @return 转换后值
     */
    public static String convertFileSize(long size) {
        long kb = 1024;
        long mb = kb * 1024;
        long gb = mb * 1024;
        if (size >= gb) {
            return String.format("%.1f GB", (float) size / gb);
        } else if (size >= mb) {
            float f = (float) size / mb;
            return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);
        } else if (size >= kb) {
            float f = (float) size / kb;
            return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);
        } else {
            return String.format("%d B", size);
        }
    }

    /**
     * 判断文件是否不为图像
     *
     * @param file 文件
     * @return 是否不为图像
     */
    public static boolean isNotImage(MultipartFile file) {
        return isNotInTypes(file, IMAGE_EXTENSIONS);
    }

    /**
     * 判断文件是否不为excel
     *
     * @param file 文件
     * @return 是否不为excel
     */
    public static boolean isNotExcel(MultipartFile file) {
        return isNotInTypes(file, EXCEL_EXTENSIONS);
    }

    /**
     * 判断文件是否不为指定类型
     *
     * @param file  文件
     * @param types 文件类型列表
     * @return 是否不为指定类型
     */
    private static boolean isNotInTypes(MultipartFile file, String[] types) {
        if (isEmpty(file)) {
            return true;
        }
        String extension = FileNameUtil.extName(file.getOriginalFilename());
        return !StringUtils.equalsAnyIgnoreCase(extension, types);
    }

}